L' Ecosistema HIP è architettato come un livello di astrazione sottile progettato per la compatibilità del codice sorgente tra architetture AMD e NVIDIA. Si avvale dello ROCm (Radeon Open Compute) stack, utilizzando specificamente il Architettura di Sistema Ibrido (HSA) runtime e il Driver di Fusione Kernel (KFD).
1. Avvio di Inizializzazione
L'inizializzazione inizia con scambi a basso livello tra i driver kernel tramite hsa_init(0, ...) e hsaKmtOpenKFD(...). Queste chiamate di configurazione creano il ponte di comunicazione tra le applicazioni nello spazio utente e l'hardware GPU AMD.
2. Rilevamento della Topologia e delle Proprietà
Prima di lanciare i kernel, il runtime identifica le capacità hardware utilizzando hsaKmtAcquireSystemProperties e hsaKmtGetNodeProperties. Mappa la memoria fisica ai nodi GPU utilizzando hsaKmtMapMemoryToGPUNodes, garantendo la visibilità della tabella delle pagine per il dispositivo.
3. La Pipeline di Compilazione
Il ponte tra CUDA e HIP si basa su due pilastri: hipify-perl (transpilatore basato su espressioni regolari) e hipcc (wrapper del compilatore).
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
4. Logica della Versione
La compatibilità è garantita tramite una formula precisa per assicurare che hipRuntimeGetVersion corrisponda alle tabelle di estensione HSA:
$$\text{HIP\_VERSION} = \text{MAJOR} \times 10^7 + \text{MINOR} \times 10^5 + \text{PATCH}$$